Ver2024.2 以降の Tableau Server から PrivateLink 経由で Snowflake OAuth を使用して接続する
はじめに
Tableau Server では、AWS PrivateLink などプライベート接続経由で Snowflake OAuth を使用した接続が可能です。バージョン2024.2 以降の Tableau Server では、このためにカスタムクライアント用の Snowflake OAuth の構成が必要です。こちらを試してみましたので記事としました。
Snowflake OAuth による接続
それぞれ以下に記載がありますが、2020.4 以降の Tableau Server ではプライベート接続経由で OAuth を使用可能です。
OAuth 構成時の Tableau Server 側のデフォルトオプションとしてバージョン 2024.1 までは共通のクライアント ID とシークレットを使用する OAuth プロキシが使用されていました。
他にも、2020.4 から Tableau Server インスタンス上で実行される OAuth サービスを使用するように構成するオプションも提供されていました。
2024.2 以降では、この内共通のクライアント ID とシークレットを使用する方式が非推奨とされました。このため、Tableau Server インスタンス上で実行される OAuth サービスを使用することになりますが、構成時に独自のクライアント ID とシークレットを提供することが必須となります。Snowflake ではカスタムクライアント用の Snowflake OAuth の構成を行うことで、これに対応できます。
この点については以下に記載があります。
前提条件
以下の環境で検証を行いました。
- Snowflake
- Business Critical エディション
- PrivateLink の設定を行い VPC 内からプライベート接続用の URL 接続できる状態としています
- Tableau Server
- バージョン:2024.2.2
- OS:Windows Server 2019
- ALB 配下にインストール
- SSL オフロードにより HTTPS 要求は ALB で終了し、HTTP 経由で Tableau Server と通信を行う
- EC2 に Snowflake ODBC Driver をインストール済み
下図の構成で検証を行いました。
Snowflake の PrivateLink 設定手順と上記構成での Tableau Server インストール手順は以下をご参照ください。
カスタムOAuth統合の作成
Snowflake でのカスタムクライアント用の OAuth 構成については以下に記載があります。
統合オブジェクトを作成するので、デフォルトでは ACCOUNTADMIN での操作が必要です。ここでは以下のコマンドでセキュリティ統合オブジェクトを作成しました。
USE ROLE ACCOUNTADMIN;
CREATE SECURITY INTEGRATION oauth_tableau_server_privatelink
TYPE = OAUTH
ENABLED = TRUE
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<Tableau ServerのFQDN>/auth/add_oauth_token'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
;
CREATE SECURITY INTEGRATION の詳細なオプションは以下に記載があります
ここでのポイントとしてOAUTH_REDIRECT_URI
にはhttps://<Tableau ServerのFQDN>/auth/add_oauth_token
を指定します。ここで指定する URI は TLS で保護されている必要があります。
統合オブジェクトを作成後、以下のコマンドを実行し、Tableau Server 側での構成に必要なクライアント ID やシークレットを取得します。
>select system$show_oauth_client_secrets('<統合オブジェクトの名称>');
{
"OAUTH_CLIENT_SECRET_2":"XXXXX",
"OAUTH_CLIENT_SECRET":"XXXXX",
"OAUTH_CLIENT_ID":"XXXXX"
}
Tableau Server 側の構成
こちらの手順は以下に記載があります。TSM(Tableau Services Manager)での操作が必要なので、OS に管理者権限を持つユーザーログインします。
※バージョン 2024.1 以前:Snowflake OAuth サービスを有効化
バージョン 2024.1 以前の Tableau Server の場合、以下のコマンドを実行し、Snowflake OAuth サービスを有効にします。
tsm configuration set -k native_api.enable_snowflake_privatelink_on_server -v true
ここではバージョン2024.2を使用しているためこの手順はスキップしました。
Snowflake OAuth サービスを構成する
ドキュメントにも記載がある以下のコマンドの設定値を自身の環境の値に置き換えます。
tsm configuration set -k oauth.snowflake.clients -v " [{\"oauth.snowflake.instance_url\":\"https://account.snowflakecomputing.com\", \"oauth.snowflake.client_id\":\"client_id_string\", \"oauth.snowflake.client_secret\":\"client_secret_string\", \"oauth.snowflake.redirect_uri\":\"http://your_server_url.com/auth/add_oauth_token\" }]"
それぞれ以下のように置き換えます。
- oauth.snowflake.instance_url
- Snowflake へのプライベート接続に使用するURL
- 例:
https://<account_identifier>.us-east-1.privatelink.snowflakecomputing.com
- oauth.snowflake.client_id
- SYSTEM$SHOW_OAUTH_CLIENT_SECRETS で取得できる Snowflake のクライアント ID
- oauth.snowflake.client_secret
- SYSTEM$SHOW_OAUTH_CLIENT_SECRETS で取得できる統合のクライアントシークレット
- oauth.snowflake.redirect_uri
- 統合オブジェクト作成時に指定した OAUTH_REDIRECT_URI と同じ値を指定
- 例:
https://<Tableau ServerのFQDN>/auth/add_oauth_token
注意点として、二重引用符は\"
のようにエスケープする必要があります。また複数の Snowflake アカウント の URL を指定可能です。
設定値は以下で確認できます。
tsm configuration get -k oauth.snowflake.clients
設定を反映させるには以下を実行します。途中、Tableau Server が再起動されます。
tsm pending-changes apply
OAuth 接続を行う
ここでは Tableau Server をインストールしたインスタンス上のブラウザで Tableau Server にログインし、パブリッシュされたデータソースを作成してみます。
以下のようにプライベート接続用の URL を指定し「Authentication」として「Sign in using OAuth」を指定します。
Snowflake へのログイン画面が開くので認証情報を入力します。
下図のポップアップが表示されるのでアクセスを許可します。
これにより OAuth で接続することができました。
ここでは抽出を作成し、スケジュール更新してみました。
Snowflake 側で対象のテーブルを更新しジョブの実行時間になると問題なく実行されていました。
更新後のデータ
構成時の注意点
本構成にあたり OAUTH_REDIRECT_URI にhttps://<Tableau ServerのFQDN>/auth/add_oauth_token
とあるように Tableau Server に HTTPS でアクセスできる必要があります。
本記事では、ELB に ACM を紐づける形で HTTPS で接続できるようにしています。そのため、Tableau Server にログインしデータソースを作成する際も、この HTTPS 経路を通してアクセスする必要があります。ここでは、Tableau Server がインストールされたインスタンスのブラウザからデータソースを作成したため、ALB のセキュリティグループに、NATゲートウェイの EIP(Elastic IP)からの通信を許可する設定を行いました。
また、Tableau Server に SSL 証明書を直接登録して SSL 化することも可能です。この場合、VPC 内で、HTTPS 経由でアクセスする URL に対して正しく名前解決が行われるように DNS 設定が必要です。
Tableau Desktop
それぞれ以下に記載がありますが、Tableau Desktop では、プライベート URL を使用するかどうかに関係なく、引き続きパートナーアプリケーション統合を使用できます。
さいごに
バージョン2024.2 の Tableau Server から PrivateLink 経由で Snowflake OAuth を使用して接続してみました。Tableau Server には HTTPS で接続できる必要があるので、構成によっては注意が必要と感じました。こちらの内容が何かの参考なれば幸いです。
参考